"""
深拷贝

深拷贝使用deepcopy函数
只要发现拷贝对象有可变类型就会对该对象到最后一个可变类型对象的每一层对象进行拷贝
对每一层拷贝的对象都会开辟新的内存空间进行存储

在拷贝可变类型对象的时候：
1.浅拷贝只拷贝第一层的数据并开辟新的内存空间来存储
2.深拷贝拷贝所有的数据并开辟对应新的内存空间来存储

总结:
1.拷贝函数：
    - 浅拷贝使用copy函数
    - 深拷贝使用deepcopy函数

2.不管是深拷贝还是浅拷贝，只要拷贝成功就会开辟新的内存空间来存储拷贝的对象

3.浅拷贝和深拷贝的区别：
    - 浅拷贝最多拷贝对象的外层
    - 深拷贝可能拷贝对象的多层
"""
import copy

a = [1, 2, 3]
b = [11, 22, 33]
c = [a, b]

# 1.深拷贝可变类型
d = copy.deepcopy(c)
print("id(c):", id(c))
print("id(d):", id(d))

# 2.深拷贝深层数据
print("id(c[0]):", id(c[0]))
print("id(d[0]):", id(d[0]))

# 3.深拷贝不可变类型
c = (a, b)
d = copy.deepcopy(c)
print("id(c):", id(c))
print("id(d):", id(d))
print("id(c[0]):", id(c[0]))
print("id(d[0]):", id(d[0]))
